// token.js
const { TOKEN_ENCODE_STR, URL_YES_PASS } = require("./config");
const jwt = require("jsonwebtoken");
const UserModel = require("../model/user");
// 生成登录 token
const create_token = (str) => {
  return jwt.sign({ str }, TOKEN_ENCODE_STR, { expiresIn: "1h" });
};
const verifyToken = async (ctx, next) => {
  let url = ctx.request.url.split("?")[0];
  // 检测接口是否在不校验接口列表中
  if (URL_YES_PASS.includes(url)) {
    // 不检测token
    await next();
  } else {
    // 检测token
    let token = ctx.request.headers["authorization"];
    if (token === "") {
      // 直接抛出错误
      ctx.status = 401;
      ctx.body = "你还没有登录，快去登录吧!";
      return;
    }
    try {
      // 验证token是否过期
      let { str = "" } = await jwt.verify(token, TOKEN_ENCODE_STR);
      // 验证token与账号是否匹配
      // console.log(str,'验证token');
      let find = await UserModel.findOne({ $or: [{ _id: str }] });
      if (find === null) {
        ctx.status = 401;
        ctx.body = "登录过期,请重新登录!";
        return;
      }
      // // 保存用户的_id，便于操作
      ctx._id = find._id;
      // ctx.name = res[0].userName
      // ctx.avatar = res[0].avatar
    } catch (e) {
      ctx.status = 401;
      ctx.body = "登录已过期,请重新登录!";
      return;
    }
    console.log(1);
    await next();
  }
};
module.exports = { create_token, verifyToken };



